home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-03-09 | 3.4 KB | 108 lines | [TEXT/CWIE] |
- //
- // CVehicle.h
- //
- // Maintain a "Vehicle" (camera and two headlights)
- //
- // By James Jennings
- // Started July 8, 1996
- //
-
- #pragma once
-
- #include <LListener.h>
- #include "CObjectMaker.h"
- #include "CCameraMaker.h"
-
- const CommandT cmd_LightsOff = 2000;
- const CommandT cmd_LeftLight = 2001;
- const CommandT cmd_RightLight = 2002;
- const CommandT cmd_BothLights = 2003;
- const CommandT cmd_CenteredLights = 2004;
- const CommandT cmd_SeparatedLights = 2005;
-
- const CommandT cmd_ExtraLights = 2010;
-
- class CVehicleViewPane;
-
- // Helper class: Make one spot light.
- class CSpotLight : public CObjectMaker<TQ3LightObject> {
- public:
- CSpotLight( TQ3CameraPlacement inPlace, float inOffset );
-
- virtual void Transform( TQ3Matrix4x4 &inM );
- virtual void SetInitialPlacement( const TQ3CameraPlacement inPlace, float inOffset );
- virtual void TurnOn( TQ3Boolean inOn );
- virtual Boolean IsOn() const { return mData.lightData.isOn; }
- protected:
- virtual void Make();
- TQ3Point3D mStartLocation;
- TQ3Vector3D mStartDirection;
- TQ3SpotLightData mData;
- };
-
- class CVehicle : public LListener {
- public:
- CVehicle( CVehicleViewPane *mViewPane ); //const SDimension16 &inFrameSize );
- virtual ~CVehicle();
-
- // motion
- virtual void SetScale(float inScale);
-
- virtual Boolean Boost( float inT, Int16 inSignX, Int16 inSignY, Int16 inSignZ );
- virtual Boolean Spin( float inT, Int16 inSignY, Int16 inSignP, Int16 inSignR );
-
- virtual void MoveForwardBy( float inDistance );
- virtual void MoveRightBy( float inDistance );
- virtual void MoveUpBy( float inDistance );
- virtual void YawBy( float inAngle );
- virtual void PitchBy( float inAngle );
- virtual void RollBy( float inAngle );
-
- virtual Boolean RollIsStabilized() { return mRollIsStabilized; }
- virtual void SetRollStabilized(Boolean inStabilized);
- virtual Boolean StabilizeRoll();
-
- // camera and lights
- virtual TQ3CameraObject GetCamera() const;
- virtual void SetCamera(TQ3CameraObject inCamera);
- virtual void GetPlacement(TQ3CameraPlacement &outPlace) const { outPlace = mPlacement; }
- virtual void SetPlacement(const TQ3CameraPlacement &inPlace);
- virtual void AddHeadlightsToGroup( TQ3GroupObject ioGroup ) const;
-
- virtual void SetLightMode( CommandT inLightMode );
- virtual CommandT GetHeadlightState(void) const;
- virtual Boolean AreHeadlightsMerged(void) const { return mMergedLights; }
-
- // LListener methods
- virtual void ListenToMessage(MessageT inMessage, void *ioParam);
-
- protected:
- // helper functions
- virtual float GetThrust();
- virtual float CalcDynamicParam(float t, float &v, Int16 sign, float acc, float damp);
-
- virtual void GetUpVector( TQ3Vector3D &outUp );
- virtual void GetForwardVector( TQ3Vector3D &outUp );
- virtual void GetRightVector( TQ3Vector3D &outUp );
- virtual void ApplyMatrix( TQ3Matrix4x4 &inChange );
-
- CVehicleViewPane * mViewPane;
-
- CSpotLight mLeftLight;
- CSpotLight mRightLight;
- TQ3GroupObject mHeadlights;
- Boolean mMergedLights;
-
- TQ3CameraObject mCamera;
- TQ3CameraPlacement mStartPlacement; // initial "placement" for the camera
- TQ3CameraPlacement mPlacement; // current "placement" for the camera
- TQ3Matrix4x4 mMatrix; // transform from initial placement to current placement
-
- TQ3Vector3D mVelocity; // vehicle velocity
- float mYawVelocity, mPitchVelocity, mRollVelocity;
- Boolean mRollIsStabilized;
- TQ3Vector3D mLocalVertical;
- float mThrust;
- float mThrottle; // user settable control
- };
-